後面會有多表操作的章節,先來介紹常用的 subquery
subquery 是很方便的多表操作方式,也被稱作隱式
我們這次用三張表,Employee, Company, Department
CREATE TABLE Employee (
Name VARCHAR(100),
Email VARCHAR(100),
EmployeeID INT PRIMARY KEY,
DepartmentID INT,
CompanyID INT
);
CREATE TABLE Company (
CompanyID INT PRIMARY KEY,
CompanyCName VARCHAR(100), -- 中文公司名稱
CompanyEName VARCHAR(100) -- 英文公司名稱
);
CREATE TABLE Department (
DepartmentID INT PRIMARY KEY,
DepartmentCName VARCHAR(100), -- 中文部門名稱
DepartmentEName VARCHAR(100), -- 英文部門名稱
CompanyID INT -- 部門所屬公司
);
INSERT INTO Employee (Name, Email, EmployeeID, DepartmentID, CompanyID) VALUES
('Alice', 'alice@example.com', 1, 101, 1),
('Bob', 'bob@example.com', 2, 102, 2),
('Charlie', 'charlie@example.com', 3, 103, 1),
('David', 'david@example.com', 4, 101, 1),
('Eve', 'eve@example.com', 5, 102, 2);
INSERT INTO Company (CompanyID, CompanyCName, CompanyEName) VALUES
(1, '台灣科技公司', 'Taiwan Tech Co.'),
(2, '美國商業公司', 'US Commerce Co.'),
(3, '日本電子公司', 'Japan Electronics Co.'),
(4, '德國製造公司', 'German Manufacturing Co.'),
(5, '中國金融公司', 'China Finance Co.');
INSERT INTO Department (DepartmentID, DepartmentCName, DepartmentEName, CompanyID) VALUES
(101, '銷售部', 'Sales', 1),
(102, '人力資源部', 'Human Resources', 2),
(103, '資訊技術部', 'Information Technology', 1),
(104, '研發部', 'Research and Development', 3),
(105, '市場部', 'Marketing', 4),
(106, '財務部', 'Finance', 5);
目前table有了,資料有了,來一個 subquery 的範例
select
Name,
(select CompanyCName from Company where CompanyID = Employee.CompanyID ),
(select DepartmentCName from Department where DepartmentID = Employee.DepartmentID)
from Employee
結果
| 姓名 | 公司 | 部門 |
| ------- | ---------------- | -----------|
| Alice | 台灣科技公司 | 銷售部 |
| Bob | 美國商業公司 | 人力資源部 |
| Charlie | 台灣科技公司 | 資訊技術部 |
| David | 台灣科技公司 | 銷售部 |
| Eve | 美國商業公司 | 人力資源部 |
subquery 是個人覺得一個多表操作的最簡單的語法,但上述這種語法效能其實不好(相較於join語法),但因為寫起來簡單,所以先介紹!